package ob_TakeNote;

import ob_TakeNote.utils.SplicingAddress;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * 复制附件的图片到新文件夹/附件：
 *    需要传入的三个参数：
 *         1.新文夹/附件的绝对路径：AttachmentsPath
 *         2.md文件：md
 *         3.要整理ob文件夹的所有子文件夹路径：Paths
 */
public class CopyAttachments {


   public static void copyAttachments(String AttachmentsPath, List<String> md, HashSet<File> dirs) throws IOException {
      // 获取md文件中的图片名称

       //复制成功，要对附件的双链也要重命名的
       String PngName = null;
      List<String> pictureName = new ArrayList<>();
       Pattern pattern = Pattern.compile("\\[\\[(.*?)\\]\\]");
      for (int i = 0; i < md.size(); i++) {
          String mdLine = md.get(i);
         Matcher doubleStrandedMatcher= pattern.matcher(mdLine);
         while (doubleStrandedMatcher.find()) {
             String fullMatch = doubleStrandedMatcher.group(0); // 获取整个匹配的内容，包括方括号
             String content = doubleStrandedMatcher.group(1);   // 获取方括号内的内容
             if (content.contains(".png")){
                 if (content.contains("/")){
                     int index = content.lastIndexOf("/");
                     PngName = content.substring(index + 1);
                     String modifiedStr = mdLine.replace(fullMatch, "[[" + PngName  + "]]");
                     md.set(i, modifiedStr);
                 }else PngName = content;

                 pictureName.add(PngName);
             }

         }
      }
//有些md是没有图片的啊。
     if (pictureName.isEmpty()){
         return;
     }

      // 获取md文件中的图片路径

      List<File> matchingPaths=FilenameMatchingPath.filenameMatchingPath(pictureName,dirs);

      //用文件/附件和图片名称进行拼接出要复制的地址路径
       SplicingAddress splicingAddress=new SplicingAddress();
       List<File> newPaths=splicingAddress.splicingAddress(AttachmentsPath,matchingPaths);


      //进行图片复制

       for (int i = 0; i < newPaths.size(); i++) {
           Copy_ob.copy_ob(matchingPaths.get(i),newPaths.get(i));
       }



   }
}
